﻿Imports ComponentFactory.Krypton.Toolkit
Imports System.Data.OleDb
Imports WiseLibraries.Net
Imports WiseLibraries.Strings
Imports System.Text

Public Class CadastroFuncionario
    Inherits KryptonForm

    Private digit As DigitRestrictor
    Private conexao As OleDbConnection
    Private colorCleaner As ComponentColorCleaner
    Private command As OleDbCommand
    Private dataSet As DataSet
    Private dataAdapter As OleDbDataAdapter
    Private cmdBuilder As OleDbCommandBuilder
    Private WithEvents webCep As WebCEP
    Private sb As StringBuilder
    Private camposErrados As ArrayList 'Para a validação

#Region "Atributos"
    Private nome As String = Nothing
    Private rg As String = Nothing
    Private Cpf As String = Nothing
    Private Cep As String = Nothing
    Private log As String = Nothing
    Private endereco As String = Nothing
    Private num As Integer = Nothing
    Private comp As String = Nothing
    Private bairro As String = Nothing
    Private cidade As String = Nothing
    Private estado As Integer = Nothing
    Private email As String = Nothing
    Private salario As Double = Nothing
    Private tels() As String = Nothing
    Private estadocivil As String = Nothing
    Private cargo As String = Nothing
    Private sexo As String = Nothing
    Private dataNasc As Date = Nothing
    Private dataadmissao As Date = Nothing
    Private tipocadastro As String = Nothing
    Private funcionario As Integer = Nothing
    Dim alteracoes As Boolean = False
#End Region

    Private Sub verificarCampos()

        If (sb.Length > 0) Then
            Dim c() As Control
            c = camposErrados.ToArray(GetType(Control))
            Assistente.trocaCorCampos(c, Assistente.COR_ERRO)
            KryptonMessageBox.Show("Há erros nos seguintes campos:" & vbNewLine & sb.ToString() & vbNewLine & "Verifique e tente novamente.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If

    End Sub

    Sub New(ByVal funcionario As Integer)

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        carregarEstados()
        carregarLogradouros()

        tipocadastro = "editar"
        btnLimpar.Visible = False
        btnSalvar.Left = btnLimpar.Left

        Me.Text = "Wotan - Edição de cadastro de funcionário"
        txtRG.Enabled = False
        txtCPF.Enabled = False

        conexao = FabricaDeConexoes.CriarConexao()
        conexao.Open()
        command = New OleDbCommand("SELECT codFuncionario " & _
                                        ", nomeFuncionario " & _
                                        ", sexoFuncionario" & _
                                        ", cpfFuncionario " & _
                                        ", rgFuncionario  " & _
                                        ", dtnascFuncionario  " & _
                                        ", estadocivilFuncionario  " & _
                                        ", enderecoFuncionario   " & _
                                        ", numenderecoFuncionario   " & _
                                        ", tblTipoLogradouro.descricaotipoLogradouro   " & _
                                        ", complementoFuncionario " & _
                                        ", bairroFuncionario " & _
                                        ", cepFuncionario " & _
                                        ", tblEstado.siglaEstado" & _
                                        ", cidadeFuncionario " & _
                                        ", emailFuncionario " & _
                                        ", salarioFuncionario " & _
                                        ", cargo " & _
                                        ", dtadmissao " & _
                                        " FROM ((tblFuncionario" & _
                                        " LEFT JOIN tblTipoLogradouro ON tblTipoLogradouro.codtipoLogradouro = tblFuncionario.codlogradouroFuncionario)" & _
                                        " LEFT JOIN tblEstado ON tblEstado.codEstado = tblFuncionario.codEstado) where codFuncionario =" & funcionario, conexao)

        Dim dr As OleDbDataReader = command.ExecuteReader()

        dr.Read()

        If (dr("codFuncionario") = funcionario) Then

            Me.funcionario = funcionario

            txtNome.Text = dr("nomeFuncionario")
            cbSexo.Text = dr("sexoFuncionario")
            txtCPF.Text = dr("cpfFuncionario")
            txtRG.Text = dr("rgFuncionario")
            DTPDataNasc.Text = dr("dtnascFuncionario")
            cbestadocivil.Text = dr("estadocivilFuncionario")
            txtEndereco.Text = dr("enderecoFuncionario")
            txtNumero.Text = dr("numenderecoFuncionario")
            CBLogradouro.Text = dr("descricaotipoLogradouro")
            txtBairro.Text = dr("bairroFuncionario")
            txtCEP.Text = dr("cepFuncionario")
            CBEstado.Text = dr("siglaEstado")
            txtCidade.Text = dr("cidadeFuncionario")
            txtEmail.Text = dr("emailFuncionario")
            txtsalario.Text = dr("salarioFuncionario")
            txtcargo.Text = dr("Cargo")
            dtpadmissao.Text = dr("dtadmissao")

            ' Add any initialization after the InitializeComponent() call.
        End If
        dr.Close()

        command.CommandText = "SELECT * FROM tblTelefoneFuncionario WHERE codFuncionario = " & funcionario
        dataAdapter = New OleDbDataAdapter(command)
        dataAdapter.Fill(dataSet, "tblTelefoneFuncionario")

        For i = 0 To dataSet.Tables("tblTelefoneFuncionario").Rows.Count - 1
            LBTelefone.Items.Add(dataSet.Tables("tblTelefoneFuncionario").Rows(i).Item("numerotelefoneFuncionario"))
        Next
        Debug.WriteLine(command)

        colorCleaner = New ComponentColorCleaner
        colorCleaner.add(Me.Controls, Assistente.COR_NORMAL)

        conexao.Close()
    End Sub
    Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        carregarEstados()
        carregarLogradouros()

        CBEstado.Text = "SP"
        cbestadocivil.SelectedIndex = 0
        CBLogradouro.Text = "Rua"
        cbSexo.SelectedIndex = 0

        tipocadastro = "novo"
        colorCleaner = New ComponentColorCleaner
        colorCleaner.add(Me.Controls, Assistente.COR_NORMAL)

        ' Add any initialization after the InitializeComponent() call.

    End Sub

    'Carregar lista de Estados
    Private Sub carregarEstados()
        Try
            Dim strQueryEstado As String = "SELECT * FROM tblEstado"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strQueryEstado, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataSet = New DataSet()
            dataAdapter.Fill(dataSet, "tblEstado")
            CBEstado.DataSource = dataSet.Tables("tblEstado")
            CBEstado.DisplayMember = "siglaEstado"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try
    End Sub

    'Carregar lista de Logradouros
    Private Sub carregarLogradouros()
        Try
            If (dataSet.Tables("tblTipoLogradouro") IsNot Nothing) Then
                dataSet.Tables("tblTipoLogradouro").Clear()
            End If
            Dim strQuerylogradouro As String = "SELECT * FROM tblTipoLogradouro"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strQuerylogradouro, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataAdapter.Fill(dataSet, "tblTipoLogradouro")
            CBLogradouro.DataSource = dataSet.Tables("tblTipoLogradouro")
            CBLogradouro.DisplayMember = "descricaoTipoLogradouro"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try
    End Sub

    'cep via web
    Private Sub btnCompletarEndereco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCompletarEndereco.Click

        If (txtCEP.MaskCompleted) Then

            webCep = New WebCEP(txtCEP.Text)

            'Se encontrar o cep, preencha os campos
            If (webCep.Resultado = 1) Then
                txtEndereco.Text = webCep.Logradouro
                CBLogradouro.Text = webCep.TipoLogradouro
                txtBairro.Text = webCep.Bairro
                txtCidade.Text = webCep.Cidade
                CBEstado.Text = webCep.UF.ToUpper
            Else
                'Caso contrário, avise
                KryptonMessageBox.Show("Não foi possível encontrar o CEP.", "Ops", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Else
            'Se o cep digitado for incompleto
            KryptonMessageBox.Show("Você deve digitar o CEP por completo.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If

    End Sub
    Private Sub btnAdicionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdicionar.Click

        Dim t As String = txtTelefone.Text

        'Transforma os itens do listBox em um vetor string
        Dim itens(LBTelefone.Items.Count - 1) As String
        For i = 0 To LBTelefone.Items.Count - 1
            itens(i) = LBTelefone.Items(i).ToString()
        Next

        'Verifica se é um número de telefone completo e se ainda não existe na lista
        If (txtTelefone.MaskCompleted) Then
            If Not (Assistente.verificarExistencia(t, itens)) Then
                LBTelefone.Items.Add(txtTelefone.Text)
                alteracoes = True

                txtTelefone.Clear()
                txtTelefone.Focus()
            Else
                KryptonMessageBox.Show("O telefone digitado já existe na lista.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        Else
            KryptonMessageBox.Show("Você deve digitar o telefone por completo.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub
    'botão remover
    Private Sub btnRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemover.Click
        If (LBTelefone.SelectedItem IsNot Nothing) Then
            LBTelefone.Items.Remove(LBTelefone.SelectedItem)
        End If
    End Sub
    'botão cancelar
    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Me.Dispose()
    End Sub

    Private Sub btnAddLogradouro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddLogradouro.Click
        Dim log As String = CBLogradouro.Text
        Dim editor As New EditorDeTabelaSimples("Adicionar ou remover Logradouros", conexao, "tblTipoLogradouro", "descricaoTipoLogradouro")
        editor.ShowDialog()
        CBLogradouro.DataBindings.Clear()
        CBLogradouro.DataSource = Nothing
        CBLogradouro.Refresh()
        CBLogradouro.Text = log
        carregarLogradouros()
    End Sub

    Private Sub inicializarRestritor()
        digit = New DigitRestrictor()
        digit.DefaultCharType = DigitRestrictor.CharType.Numeric
        digit.add(txtNumero)
        digit.add(txtRG)
    End Sub

    Private Function validarFuncionario() As Boolean
        Dim val As New RegexValidator()
        camposErrados = New ArrayList()
        sb = New StringBuilder()

        If (val.validateName(txtNome.Text)) Then
            nome = txtNome.Text
        Else
            camposErrados.Add(txtNome)
            sb.Append("Nome" & vbNewLine)
        End If
        '--------------------
        If Not (String.IsNullOrEmpty(txtRG.Text)) Then
            rg = Assistente.removePontos(txtRG.Text)
        Else
            camposErrados.Add(txtRG)
            sb.Append("RG" & vbNewLine)
        End If

        If (txtCPF.MaskCompleted And New RegexValidator().validateCpf(Assistente.removePontos(txtCPF.Text))) Then
            Cpf = txtCPF.Text
        Else
            camposErrados.Add(txtCPF)
            sb.Append("CPF" & vbNewLine)
        End If

        '-----------------
        If (txtCEP.MaskCompleted) Then
            Cep = Assistente.removePontos(txtCEP.Text)
        Else
            camposErrados.Add(txtCEP)
            sb.Append("CEP" & vbNewLine)
        End If
        '--------------
        If (CBLogradouro.SelectedItem IsNot Nothing) Then
            log = DirectCast(CBLogradouro.SelectedItem, DataRowView).Item("codTipoLogradouro")
        Else
            camposErrados.Add(CBLogradouro)
            sb.Append("Logradouro" & vbNewLine)
        End If
        '-------------
        If Not (String.IsNullOrEmpty(txtNumero.Text)) Then
            num = txtNumero.Text
        Else
            camposErrados.Add(txtNumero)
            sb.Append("Número" & vbNewLine)
        End If
        '-----------------
        If Not (String.IsNullOrEmpty(txtBairro.Text)) Then
            bairro = txtBairro.Text
        Else
            camposErrados.Add(txtBairro)
            sb.Append("Bairro" & vbNewLine)
        End If
        '----------------
        ' Valida(estado)
        If (CBEstado.SelectedItem IsNot Nothing) Then
            estado = DirectCast(CBEstado.SelectedItem, DataRowView).Item("codEstado")
        Else
            camposErrados.Add(CBEstado)
            sb.Append("Estado" & vbNewLine)
        End If

        '------------
        If (LBTelefone.Items.Count > 0) Then
            Dim vetor(LBTelefone.Items.Count - 1) As String
            For i = 0 To vetor.Length - 1
                vetor(i) = LBTelefone.Items(i)
                Debug.WriteLine(vetor(i))
            Next

            tels = vetor
        End If

        '------------------
        If Not (String.IsNullOrEmpty(cbSexo.Text)) Then
            sexo = cbSexo.Text
        Else
            camposErrados.Add(cbSexo)
            sb.Append("Sexo" & vbNewLine)
        End If

        '------------------------
        If (DTPDataNasc.Value <> Nothing) Then
            dataNasc = DTPDataNasc.Value
        End If
        '-----------------------

        If Not (String.IsNullOrEmpty(txtEndereco.Text)) Then
            endereco = txtEndereco.Text
        Else
            camposErrados.Add(txtEndereco)
            sb.Append("Endereco" & vbNewLine)
        End If
        '---------------
        If Not (String.IsNullOrEmpty(txtCidade.Text)) Then
            cidade = txtCidade.Text
        Else
            camposErrados.Add(txtCidade)
            sb.Append("Cidade" & vbNewLine)
        End If
        '---------------------------
        If Not (String.IsNullOrEmpty(cbestadocivil.Text)) Then
            estadocivil = cbestadocivil.Text
        Else
            camposErrados.Add(cbestadocivil)
            sb.Append("Estado Civil" & vbNewLine)

        End If
        '-------------------------------

        If Not (String.IsNullOrEmpty(txtcargo.Text)) Then
            cargo = txtcargo.Text
        Else
            camposErrados.Add(txtcargo)
            sb.Append("Cargo" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtsalario.Text)) Then
            salario = txtsalario.Text
        Else
            camposErrados.Add(txtsalario)
            sb.Append("Salario" & vbNewLine)
        End If

        comp = txtComplemento.Text

        If (String.IsNullOrEmpty(txtEmail.Text)) Then
            camposErrados.Add(txtEmail)
            sb.Append("Email" & vbNewLine)
        Else
            If (val.validateEmail(txtEmail.Text)) Then
                email = txtEmail.Text
            Else
                camposErrados.Add(txtEmail)
                sb.Append("Email" & vbNewLine)
            End If
        End If

        If (dtpadmissao.Value <> Nothing) Then
            dataadmissao = dtpadmissao.Value
        End If
        '-----------------------

        If Not (tipocadastro = "editar") Then
            If (Assistente.contemRegistro("SELECT * FROM tblFuncionario WHERE cpfFuncionario = '" & Assistente.removePontos(txtCPF.Text) & "'")) Then
                camposErrados.Add(txtCPF)
                sb.Append("O CPF digitado já está cadastrado" & vbNewLine)
            End If

            If (Assistente.contemRegistro("SELECT * FROM tblFuncionario WHERE rgFuncionario = '" & Assistente.removePontos(txtRG.Text) & "'")) Then
                camposErrados.Add(txtRG)
                sb.Append("O RG digitado já está cadastrado" & vbNewLine)
            End If
        End If

        verificarCampos()

        If (sb.Length > 0) Then
            Return (False)
        Else
            Return (True)
        End If

    End Function

    Private Sub CadastrarFuncionario()
        If (validarFuncionario() = True) Then

            Dim tels(LBTelefone.Items.Count - 1) As String
            For i = 0 To LBTelefone.Items.Count - 1
                tels(i) = LBTelefone.Items(i)
            Next

            Dim sql As String = "INSERT INTO tblFuncionario(nomeFuncionario,sexoFuncionario,cpfFuncionario,rgFuncionario,dtnascFuncionario,estadocivilFuncionario,enderecoFuncionario,numenderecoFuncionario,codlogradouroFuncionario,complementoFuncionario,bairroFuncionario,cepFuncionario,codEstado,cidadeFuncionario,emailFuncionario,salarioFuncionario,cargo,dtadmissao) VALUES('" & _
            nome & "','" & _
            sexo & "','" & _
            Cpf & "','" & _
            rg & "','" & _
            dataNasc.Date & "','" & _
            estadocivil & "','" & _
            endereco & "','" & _
            num & "'," & _
            log & ",'" & _
            comp & "','" & _
            bairro & "','" & _
            Cep & "'," & _
            estado & ",'" & _
            cidade & "','" & _
            email & "'," & _
            salario & ",'" & _
            cargo & "','" & _
            dataadmissao.Date & "')"

            Debug.WriteLine(salario)

            Try
                conexao.Open()
                command = New OleDbCommand(sql, conexao)
                command.ExecuteNonQuery()
                Debug.WriteLine(sql)
                ' KryptonMessageBox.Show("Cliente cadastrado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Assistente.limparCampos(Me)

            Catch ex As OleDbException
                Debug.WriteLine(ex.Message)
                '  KryptonMessageBox.Show("Não foi possível cadastrar o cliente!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try

            command.CommandText = "SELECT TOP 1 MAX(codFuncionario) AS 'ultimo' FROM tblFuncionario"
            dataAdapter.SelectCommand = command
            dataAdapter.Fill(dataSet, "tblTeste")
            Dim ultimoCodigo As Integer = dataSet.Tables("tblTeste").Rows(0).Item(0)
            Try
                For i = 0 To tels.Length - 1
                    command.CommandText = "INSERT INTO tblTelefoneFuncionario (numerotelefoneFuncionario,codFuncionario)  VALUES ('" & _
                        tels(i) & "'," & _
                        ultimoCodigo & ")"
                    command.ExecuteNonQuery()
                Next
            Catch ex As OleDbException
                Debug.WriteLine(ex.Message)
            End Try

            Debug.WriteLine(sql)

            conexao = FabricaDeConexoes.CriarConexao()
            conexao.Close()
        End If

    End Sub

    Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
        If (tipocadastro = "novo") Then
            If (validarFuncionario()) Then
                CadastrarFuncionario()
                KryptonMessageBox.Show("Funcionário cadastrado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Dispose()
            End If

        ElseIf (tipocadastro = "editar") Then
            If (validarFuncionario()) Then
                AtualizarFuncionario()
                KryptonMessageBox.Show("Funcionário atualizado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Dispose()
            End If
        End If

    End Sub

    Private Sub btnLimpar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpar.Click
        Assistente.limparCampos(Me)
        Assistente.trocaCorTransition(Me)
        CBEstado.Text = "SP"
        cbestadocivil.SelectedIndex = 0
        CBLogradouro.Text = "Rua"
        cbSexo.SelectedIndex = 0
    End Sub

    Private Sub AtualizarFuncionario()
        If (validarFuncionario() = True) Then

            Try
                'Debug.WriteLine(auto)
                Dim sql As String = "UPDATE tblFuncionario SET nomeFuncionario = '" & nome & "', sexoFuncionario = '" & sexo & "', cpfFuncionario = '" & Cpf & "',rgFuncionario = '" & rg & "', dtnascFuncionario = '" & dataNasc.Date & "', estadocivilFuncionario= '" & estadocivil & "', enderecoFuncionario = '" & endereco & "', codlogradouroFuncionario = " & log & ", numenderecoFuncionario = '" & num & "', complementoFuncionario = '" & comp & "', bairroFuncionario= '" & bairro & "', cepFuncionario= '" & Cep & "', codEstado = " & estado & ", cidadeFuncionario = '" & cidade & "', emailFuncionario = '" & email & "', dtadmissao = '" & dataadmissao.Date & "', salarioFuncionario = " & salario & ", cargo = '" & cargo & "' WHERE codFuncionario = " & funcionario
                'Debug.WriteLine(auto)

                Debug.WriteLine(sql)

                conexao.Open()
                command = New OleDbCommand(sql, conexao)
                command.ExecuteNonQuery()
                Debug.WriteLine(sql)

                'Verifica se houve alterações nos telefones

                'Verifica os telefones que devem ser excluídos
                Dim tblIndex As Integer = dataSet.Tables("tblTelefoneFuncionario").Rows.Count - 1
                Dim listIndex As Integer = LBTelefone.Items.Count - 1

                'Quando não há nenhum telefone na lista
                If (listIndex = -1) Then
                    command.CommandText = String.Format("DELETE FROM tblTelefoneFuncionario WHERE codFuncionario = {0}", funcionario)
                    command.ExecuteNonQuery()
                End If

                'Quando há algum telefone na lista
                For i = 0 To tblIndex
                    For j = 0 To listIndex
                        If (dataSet.Tables("tblTelefoneFuncionario").Rows(i).Item("numerotelefoneFuncionario") = LBTelefone.Items(j)) Then
                            Exit For
                        Else
                            If (j = listIndex) Then
                                dataSet.Tables("tblTelefoneFuncionario").Rows(i).Delete()
                                alteracoes = True 'Houve alterações
                            End If
                        End If
                    Next
                Next

                Dim cb = New OleDbCommandBuilder(dataAdapter)
                dataAdapter.Update(dataSet, "tblTelefoneFuncionario")

                If Not (alteracoes) Then
                    Exit Sub 'Se não houve alterações não precisa continuar
                End If

                'Verifica os telefones que devem ser adicionados/gravados
                tblIndex = dataSet.Tables("tblTelefoneFuncionario").Rows.Count - 1
                listIndex = LBTelefone.Items.Count - 1

                'Quando não há nenhum telefone na lista
                If (tblIndex = -1) Then
                    For i = 0 To tels.Length - 1
                        command.CommandText = "INSERT INTO tblTelefoneFuncionario (numerotelefoneFuncionario, codFuncionario)  VALUES ('" & _
                            tels(i) & "'," & _
                            funcionario & ")"
                        command.ExecuteNonQuery()
                    Next
                End If

                'Quando já existem telefones que foram adicionados e removidos
                For i = 0 To listIndex
                    For j = 0 To tblIndex
                        Dim telefone As String = dataSet.Tables("tblTelefoneFuncionario").Rows(j).Item("numerotelefoneFuncionario")
                        If (telefone = LBTelefone.Items(i)) Then
                            Exit For
                        Else
                            Dim sqlTelefone As String = String.Format("INSERT INTO tblTelefoneFuncionario (numerotelefoneFuncionario, codFuncionario) VALUES ('{0}', {1})", LBTelefone.Items(i), funcionario)
                            command.CommandText = sqlTelefone
                            command.ExecuteNonQuery()
                        End If

                    Next
                Next
                dataAdapter.Update(dataSet, "tblTelefoneFuncionario")

            Catch ex As OleDbException
                Debug.WriteLine(ex.Message)
                KryptonMessageBox.Show("Funcionario não cadastrado !", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Finally
                conexao.Close()
            End Try
        End If
    End Sub
    Private Sub ValidaNumero(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," Then

            e.Handled = True

        End If
    End Sub

    Private Sub ValidaLetras(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not Char.IsLetter(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," And Not e.KeyChar = " " Then
            e.Handled = True
        End If
    End Sub

    Private Sub txtNome_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNome.KeyPress
        ValidaLetras(txtNome, e)
    End Sub

    Private Sub txtEndereco_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEndereco.KeyPress
        ValidaLetras(txtEndereco, e)
    End Sub

    Private Sub txtNumero_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNumero.KeyPress
        ValidaNumero(txtNumero, e)
    End Sub

    Private Sub txtCidade_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCidade.KeyPress
        ValidaLetras(txtCidade, e)
    End Sub

    Private Sub txtsalario_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        ValidaNumero(txtsalario, e)
    End Sub

    Private Sub txtcargo_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtcargo.KeyPress
        ValidaLetras(txtcargo, e)
    End Sub

End Class